package com.ply.flashsalessystem.utils;
import com.ply.flashsalessystem.annotation.AuthorityName;
import com.ply.flashsalessystem.annotation.StoreAuthority;
import com.ply.flashsalessystem.annotation.UserAuthority;
import com.ply.flashsalessystem.service.AuthorityService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
import java.util.Objects;
/**
 * @author XiaoPan
 * date: 2022/5/4 16:08
 * <p>
 * action:
 */
@Slf4j
@Component
public class AuthorityUtils {
    @Autowired
    AuthorityService authorityService;

    // 判断 有无权限
    public boolean pdAdminAuthority(String className, String functionName) {
        log.debug("UserUtils.getUserType(): {}", UserUtils.getUserType());
//        if (UserUtils.getUserId() == null) {
//            // 没有 token 的使用的 方法 放过 后面
//            return false;
//        }
        // 找到 注解
        Class<?> c;
        try {
            c = Class.forName(className);
            Method[] methods = c.getMethods();
            for (Method method : methods) {
                // 找到 方法
                if (method.getName().equals(functionName)) {
                    if (Objects.equals(UserUtils.getUserType(), Type.TYPE_USER)) {
                        log.debug("类型 {}", UserUtils.getUserType());
                        // 是用户 判断注解
                        return method.getAnnotation(UserAuthority.class) != null;
                    }
                    if (Objects.equals(UserUtils.getUserType(), Type.TYPE_STORE)) {
                        log.debug("类型 {}", UserUtils.getUserType());
                        // 是店家
                        return method.getAnnotation(StoreAuthority.class) != null;
                    }
                    log.debug("类型 {}", UserUtils.getUserType());
//                    是管理员
                    AuthorityName annotation = method.getAnnotation(AuthorityName.class);
                    if (annotation == null) {
                        return false;
                    }
                    int i = annotation.authorityId();
                    String s = annotation.authorityName();
                    log.debug("authorityId {} authorityName {}", i, s);
                    // 到数据库 中 查询 是管理员
                    if (Objects.equals(UserUtils.getUserType(), Type.TYPE_ADMIN)) {
                        if(authorityService.authorityAndId(i,UserUtils.getUserId())){
                            log.debug("{}:{} 拥有权限 authorityName: {}",UserUtils.getUserType(),UserUtils.getUserName(),s);
                            return true;
                        }
                    }
                    log.debug("{} {} 不拥有权限 authorityName {}", UserUtils.getUserType(), UserUtils.getUserName(), s);
                    break;
                }
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return false;
}
//    public boolean adminAuthority(String className, String functionName, Class<Annotation> obj) {
//        Class<?> c;
//        try {
//            c = Class.forName(className);
//            Method[] methods = c.getMethods();
//            for (Method method : methods) {
//                // 找到 方法
//                if (method.getName().equals(functionName)) {
//                    AuthorityName annotation = method.getAnnotation(obj.class);
//                    int i = annotation.authorityId();
//                    String s = annotation.authorityName();
//                    log.debug("authorityId {} authorityName {}",i,s);
//                    // 到数据库 中 查询
//                    if (Objects.equals(UserUtils.getUserType(), Type.TYPE_USER)) {
//                        //是 用户
//                        if(authorityService.groupAndId(i,1)){
//                            log.debug("{}:{} 拥有权限 authorityName: {}",UserUtils.getUserType(),UserUtils.getUserName(),s);
//                            return true;
//                        }
//                    }
//                    // 是管理员
//                    if (Objects.equals(UserUtils.getUserType(), Type.TYPE_ADMIN)) {
//                        if(authorityService.authorityAndId(i,UserUtils.getUserId())){
//                            log.debug("{}:{} 拥有权限 authorityName: {}",UserUtils.getUserType(),UserUtils.getUserName(),s);
//                            return true;
//                        }
//                    }
//                    // 是店家
//                    if (Objects.equals(UserUtils.getUserType(), Type.TYPE_STORE)) {
//                        if(authorityService.groupAndId(i,2)){
//                            log.debug("{}:{} 拥有权限 authorityName: {}",UserUtils.getUserType(),UserUtils.getUserName(),s);
//                            return true;
//                        }
//                    }
//                    log.debug("{} {} 不拥有权限 authorityName {}",UserUtils.getUserType(),UserUtils.getUserName(),s);
//                    break;
//                }
//            }
//        } catch (ClassNotFoundException e) {
//            e.printStackTrace();
//        }
//        return false;
//    }
}
